package com.ruoyi.site.service.impl;

import java.util.List;
import java.util.Date;

import com.ruoyi.site.domain.CartItems;
import com.ruoyi.site.service.ISfxService;
import com.ruoyi.site.service.ITracksService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.site.mapper.CartsMapper;
import com.ruoyi.site.domain.Carts;
import com.ruoyi.site.service.ICartsService;
import com.ruoyi.site.service.ICartItemsService; // 假设 CartItemsService 已存在或将被创建

/**
 * 购物车Service业务层处理
 *
 * @author chuckeytang
 * @date 2025-10-13
 */
@Service
public class CartsServiceImpl implements ICartsService
{
    @Autowired
    private CartsMapper cartsMapper;

    // 注入购物车项目 Service，用于加载详细信息
    @Autowired
    private ICartItemsService cartItemsService;

    @Autowired
    private ITracksService tracksService;

    @Autowired
    private ISfxService sfxService;

    /**
     * 查询购物车
     */
    @Override
    public Carts selectCartsByCartId(Long cartId)
    {
        return cartsMapper.selectCartsByCartId(cartId);
    }

    /**
     * 根据用户ID查询购物车
     */
    @Override
    public Carts selectCartsByUserId(Long userId)
    {
        Carts cart = cartsMapper.selectCartsByUserId(userId);

        // 核心逻辑：如果查到了购物车，则加载其项目列表
        if (cart != null) {
            // 1. 通过 cartItemsService 加载该购物车下的所有项目
            List<CartItems> items = cartItemsService.selectCartItemsListByCartId(cart.getCartId());

            // 2. 遍历项目，加载关联的 Tracks/Sfx 详细信息
            for (CartItems item : items) {
                if ("track".equalsIgnoreCase(item.getProductType())) {
                    // 加载 Tracks 详细信息
                    item.setTrack(tracksService.selectTracksByTrackId(item.getProductId()));
                } else if ("sfx".equalsIgnoreCase(item.getProductType())) {
                    // 加载 Sfx 详细信息
                    item.setSfx(sfxService.selectSfxBySfxId(item.getProductId()));
                }
                // 确保没有敏感信息泄漏，但通常 Tracks/Sfx 实体已做处理
            }

            cart.setItems(items); // 设置填充好的 items 列表
        }

        return cart;
    }

    /**
     * 查询购物车列表
     */
    @Override
    public List<Carts> selectCartsList(Carts carts)
    {
        return cartsMapper.selectCartsList(carts);
    }

    /**
     * 新增购物车
     */
    @Override
    public int insertCarts(Carts carts)
    {
        // 确保设置时间戳
        carts.setCreatedAt(new Date());
        carts.setUpdatedAt(new Date());
        return cartsMapper.insertCarts(carts);
    }

    /**
     * 修改购物车 (主要用于更新时间戳)
     */
    @Override
    public int updateCarts(Carts carts)
    {
        carts.setUpdatedAt(new Date());
        return cartsMapper.updateCarts(carts);
    }

    /**
     * 批量删除购物车
     */
    @Override
    public int deleteCartsByCartIds(Long[] cartIds)
    {
        return cartsMapper.deleteCartsByCartIds(cartIds);
    }

    /**
     * 删除购物车信息
     */
    @Override
    public int deleteCartsByCartId(Long cartId)
    {
        return cartsMapper.deleteCartsByCartId(cartId);
    }
}